package com.efuture.chaptersix

/* @Description: Kotlin语言单例模式
 * @Auther: zhaoshanshan
 * @Date: 2022/03/11/11:00 下午
 */
//1.饿汉式版本 直接加object关键字就行
//object Demo124{
//
//}

//2.懒汉式版本
//class Demo124{
//    companion object{
//        private var instance:Demo124? = null
//        get() {
//            if(field==null){
//                field = Demo124();
//            }
//            return field;
//        }
//        fun getInstanceAction() = instance!!
//    }
//
//    fun show() {
//        println("show")
//    }
//}

//3.安全锁校验版本
//class Demo124{
//    companion object{
//        private var instance:Demo124? = null
//        get() {
//            if(field==null){
//                field = Demo124();
//            }
//            return field;
//        }
//        @Synchronized //添加锁机制 保证线程安全
//        fun getInstanceAction() = instance!!
//    }
//
//    fun show() {
//        println("show")
//    }
//}

//4 双重安全锁校验
 class Dmeo124{
     companion object{
         val instance:Dmeo124? by lazy (mode=LazyThreadSafetyMode.SYNCHRONIZED){Dmeo124()}
     }
     fun show() {
        println("show")
    }
 }

fun main() {
    //懒汉式调用
    //Demo124.getInstanceAction().show();
}

    